# -*- coding: utf-8 -*-
from tkGrid import *
import xmlrpclib
#import pickle
import tkMessageBox as msgBox
from BD_InterfaceBaseDonnees import *
try:
    from xTkinter import *
except:
    print >> sys.stderr, 'Le module xTkinter est  introuvable'  
    sys.exit(1)
import sys

class Vue_Enregistrement(Frame):
    def __init__(self,master,parent,**cnf):
        KeysList=cnf.keys()
        self.parent = parent
        self.master=master
        self.width=400
        self.height=200
        if ('width' in KeysList):
            self.width=cnf['width']
        if ('width' in KeysList):
            self.height=cnf['height']
        Frame.__init__(self,master,cnf)              
        self.place(x=0,y=0)
        LTable=xLabel(self,text='Enregistrement',height=1,width=15)
        LTable.setLocation(10,10)
        ETable=xEntry(self,width=15)
        ETable.setLocation(80,10)       
        "  Liste des tables existantes "
        LListeTables=xLabel(self,text='enregistreement',height=1,width=15)
        LListeTables.setLocation(210,10)
        self.CBListeTables=xCombobox(self,width=10)
        self.CBListeTables.setLocation(310,10)
        self.CBListeTables.setListWidth(15) 
        self.CBListeTables.setListHeight(3)       
        self.CBListeTables.setText('<aucune>')
        self.TableSelectionne = None
        LChamps=xLabel(self,text='Champs de la table',height=1,width=18)
        LChamps.setLocation(210,40)      
        " Pour recharger la liste des tables"
        RechargeTables=xButton(self,text='Recharger',height=1,width=9)
        RechargeTables.setLocation(140,10)
        RechargeTables.configure(anchor=CENTER)
        RechargeTables.setCommand(self.listTables)
        
        self.CBListeTables.setValidator(self.RemplirTableEnregistrement)
        self.master.bind('<Configure>',self.repaint,add='+')       

    def repaint(self,evt):
        self.master.update()
        self.x=self.master.winfo_width()/2-(self.width/2)
        self.y=self.master.winfo_height()/2-(self.height/2)       
        self.place(x=self.x,y=self.y)
        pass
    
    def listTables(self):
            Reponse = self.parent.BaseDonnees.ObtenirTable()
            if (Reponse[0]==1):
                self.CBListeTables.clear()
                self.CBListeTables.setListHeight(3)
                NomsTable = Reponse[1]
                for NomTable in NomsTable:
                    self.CBListeTables.addItem(NomTable)
                self.CBListeTables.setSelected(0)
                self.CBListeTables.setText('<CHOISIR>')
            else:
                msgBox.showerror('PERP 2009', 'Une erreur est survenue!\n'+Reponse[1])
            pass
        
    def RemplirTableEnregistrement(self):
        ListeChamps = []
        NomsChamps = []
        ListeEnregistrement = []
        TableSelectionnee = self.CBListeTables.getText()
        Message = self.parent.BaseDonnees.ObtenirChamp( TableSelectionnee)
        if Message[0]==1:
            ListeChamps = Message[1]
            for UnChamp in ListeChamps:
                NomsChamps.append(UnChamp.Nom)
            Message = self.parent.BaseDonnees.ObtenirEnregistrement(NomsChamps, TableSelectionnee )
            if Message[0] == 1:
                ListeEnregistrement = Message[1]
            else:
                msgBox.showerror('PERP 2009 | Édition des tables', 'Une erreur est survenue!\n'+Message[1])
        else:
            msgBox.showerror('PERP 2009 | Édition des tables', 'Une erreur est survenue!\n'+Message[1])

        """"
        Composant tkGrid modifié
        On passe un dictionnaire comme paramètre
        Voir le sample inclus dans le module tkGrid.py        
        """
        print ListeEnregistrement
        Rangees = []
        for i in range (0, len(ListeEnregistrement[0]) - 1):
            Enregistrement = []
            for Range in ListeEnregistrement:
                Enregistrement.append(Range[i])
            Rangees.append(Enregistrement)
        
        GrilleAfficherEnregistrement = tkGrid(
                        self,
                        x=0,y=71,
                        columnsheaders=NomsChamps,                        
                        arrayvar=Rangees,
                        freeze=True,
                        type='active',# Pour le moment ce param`tre est obligatoire
                        title='Table Emp')
        GrilleEntrerEnregistrement = tkGrid(
                        self,
                        x=0,y=71 + GrilleAfficherEnregistrement.height,
                        columnsheaders=NomsChamps,                        
                        arrayvar=None,
                        freeze=True,
                        type='active',# Pour le moment ce param`tre est obligatoire
                        title='Table Emp')
        
if __name__=='__main__':
    root=Tk()
    root.geometry('800x600')
    grille=Vue_Enregistrement(root,None)
    grille.mainloop

    root.mainloop()